#pragma once
#ifndef OBR_SKYSPHEREBACKGROUND_H
#define OBR_SKYSPHEREBACKGROUND_H

#include "common.h"
#include "core/Background.h"
#include "core/Texture.h"

namespace OBR
{
class SkySphereBackground : public Background, public Configurable<SkySphereBackground>
{
public:
    ColorTexture2D texture;

private:
public:
    SkySphereBackground(); // defaults to black
    ~SkySphereBackground();

    /* ------------------------ override ProgramEntry ----------------------- */

    /**
     * @brief upload data to sbt payload
     *
     */
    void uploadSbtData() override;

protected:
    /* ------------------------ override Configurable ----------------------- */

    /**
     * @brief create object from config
     *
     * @param config
     */
    void _buildFromConfig(const Json::Value &config) override;

private:
    /* ------------------------ override ProgramEntry ----------------------- */

    /**
     * @brief Get the Program Group Options of this type
     *
     * @return OptixProgramGroupOptions&
     */
    OptixProgramGroupOptions &getProgramGroupOptions() override;

    /**
     * @brief Get the Program Group Desc of this type
     *
     * @return OptixProgramGroupOptions&
     */
    OptixProgramGroupDesc &getProgramGroupDesc() override;
};

} // namespace OBR

#endif